// axios v1.0.0-alpha.1 Copyright (c) 2022 Matt Zabriskie
(function (global, factory) {
      typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
      typeof define === 'function' && define.amd ? define(factory) :
      (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.axios = factory());
    })(this, (function () { 'use strict';
    
      var bind = function bind(fn, thisArg) {
        return function wrap() {
          return fn.apply(thisArg, arguments);
        };
      };
    
      // utils is a library of generic helper functions non-specific to axios
    
      var toString = Object.prototype.toString;
    
      // eslint-disable-next-line func-names
      var kindOf = (function(cache) {
        // eslint-disable-next-line func-names
        return function(thing) {
          var str = toString.call(thing);
          return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
        };
      })(Object.create(null));
    
      function kindOfTest(type) {
        type = type.toLowerCase();
        return function isKindOf(thing) {
          return kindOf(thing) === type;
        };
      }
    
      /**
       * Determine if a value is an Array
       *
       * @param {Object} val The value to test
       * @returns {boolean} True if value is an Array, otherwise false
       */
      function isArray(val) {
        return Array.isArray(val);
      }
    
      /**
       * Determine if a value is undefined
       *
       * @param {Object} val The value to test
       * @returns {boolean} True if the value is undefined, otherwise false
       */
      function isUndefined(val) {
        return typeof val === 'undefined';
      }
    
      /**
       * Determine if a value is a Buffer
       *
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a Buffer, otherwise false
       */
      function isBuffer(val) {
        return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
          && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
      }
    
      /**
       * Determine if a value is an ArrayBuffer
       *
       * @function
       * @param {Object} val The value to test
       * @returns {boolean} True if value is an ArrayBuffer, otherwise false
       */
      var isArrayBuffer = kindOfTest('ArrayBuffer');
    
    
      /**
       * Determine if a value is a view on an ArrayBuffer
       *
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
       */
      function isArrayBufferView(val) {
        var result;
        if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
          result = ArrayBuffer.isView(val);
        } else {
          result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
        }
        return result;
      }
    
      /**
       * Determine if a value is a String
       *
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a String, otherwise false
       */
      function isString(val) {
        return typeof val === 'string';
      }
    
      /**
       * Determine if a value is a Number
       *
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a Number, otherwise false
       */
      function isNumber(val) {
        return typeof val === 'number';
      }
    
      /**
       * Determine if a value is an Object
       *
       * @param {Object} val The value to test
       * @returns {boolean} True if value is an Object, otherwise false
       */
      function isObject(val) {
        return val !== null && typeof val === 'object';
      }
    
      /**
       * Determine if a value is a plain Object
       *
       * @param {Object} val The value to test
       * @return {boolean} True if value is a plain Object, otherwise false
       */
      function isPlainObject(val) {
        if (kindOf(val) !== 'object') {
          return false;
        }
    
        var prototype = Object.getPrototypeOf(val);
        return prototype === null || prototype === Object.prototype;
      }
    
      /**
       * Determine if a value is a Date
       *
       * @function
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a Date, otherwise false
       */
      var isDate = kindOfTest('Date');
    
      /**
       * Determine if a value is a File
       *
       * @function
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a File, otherwise false
       */
      var isFile = kindOfTest('File');
    
      /**
       * Determine if a value is a Blob
       *
       * @function
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a Blob, otherwise false
       */
      var isBlob = kindOfTest('Blob');
    
      /**
       * Determine if a value is a FileList
       *
       * @function
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a File, otherwise false
       */
      var isFileList = kindOfTest('FileList');
    
      /**
       * Determine if a value is a Function
       *
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a Function, otherwise false
       */
      function isFunction(val) {
        return toString.call(val) === '[object Function]';
      }
    
      /**
       * Determine if a value is a Stream
       *
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a Stream, otherwise false
       */
      function isStream(val) {
        return isObject(val) && isFunction(val.pipe);
      }
    
      /**
       * Determine if a value is a FormData
       *
       * @param {Object} thing The value to test
       * @returns {boolean} True if value is an FormData, otherwise false
       */
      function isFormData(thing) {
        var pattern = '[object FormData]';
        return thing && (
          (typeof FormData === 'function' && thing instanceof FormData) ||
          toString.call(thing) === pattern ||
          (isFunction(thing.toString) && thing.toString() === pattern)
        );
      }
    
      /**
       * Determine if a value is a URLSearchParams object
       * @function
       * @param {Object} val The value to test
       * @returns {boolean} True if value is a URLSearchParams object, otherwise false
       */
      var isURLSearchParams = kindOfTest('URLSearchParams');
    
      /**
       * Trim excess whitespace off the beginning and end of a string
       *
       * @param {String} str The String to trim
       * @returns {String} The String freed of excess whitespace
       */
      function trim(str) {
        return str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
      }
    
      /**
       * Determine if we're running in a standard browser environment
       *
       * This allows axios to run in a web worker, and react-native.
       * Both environments support XMLHttpRequest, but not fully standard globals.
       *
       * web workers:
       *  typeof window -> undefined
       *  typeof document -> undefined
       *
       * react-native:
       *  navigator.product -> 'ReactNative'
       * nativescript
       *  navigator.product -> 'NativeScript' or 'NS'
       */
      function isStandardBrowserEnv() {
        var product;
        if (typeof navigator !== 'undefined' && (
          (product = navigator.product) === 'ReactNative' ||
          product === 'NativeScript' ||
          product === 'NS')
        ) {
          return false;
        }
    
        return typeof window !== 'undefined' && typeof document !== 'undefined';
      }
    
      /**
       * Iterate over an Array or an Object invoking a function for each item.
       *
       * If `obj` is an Array callback will be called passing
       * the value, index, and complete array for each item.
       *
       * If 'obj' is an Object callback will be called passing
       * the value, key, and complete object for each property.
       *
       * @param {Object|Array} obj The object to iterate
       * @param {Function} fn The callback to invoke for each item
       */
      function forEach(obj, fn) {
        // Don't bother if no value provided
        if (obj === null || typeof obj === 'undefined') {
          return;
        }
    
        // Force an array if not already something iterable
        if (typeof obj !== 'object') {
          /*eslint no-param-reassign:0*/
          obj = [obj];
        }
    
        if (isArray(obj)) {
          // Iterate over array values
          for (var i = 0, l = obj.length; i < l; i++) {
            fn.call(null, obj[i], i, obj);
          }
        } else {
          // Iterate over object keys
          for (var key in obj) {
            if (Object.prototype.hasOwnProperty.call(obj, key)) {
              fn.call(null, obj[key], key, obj);
            }
          }
        }
      }
    
      /**
       * Accepts varargs expecting each argument to be an object, then
       * immutably merges the properties of each object and returns result.
       *
       * When multiple objects contain the same key the later object in
       * the arguments list will take precedence.
       *
       * Example:
       *
       * ```js
       * var result = merge({foo: 123}, {foo: 456});
       * console.log(result.foo); // outputs 456
       * ```
       *
       * @param {Object} obj1 Object to merge
       * @returns {Object} Result of all merge properties
       */
      function merge(/* obj1, obj2, obj3, ... */) {
        var result = {};
        function assignValue(val, key) {
          if (isPlainObject(result[key]) && isPlainObject(val)) {
            result[key] = merge(result[key], val);
          } else if (isPlainObject(val)) {
            result[key] = merge({}, val);
          } else if (isArray(val)) {
            result[key] = val.slice();
          } else {
            result[key] = val;
          }
        }
    
        for (var i = 0, l = arguments.length; i < l; i++) {
          forEach(arguments[i], assignValue);
        }
        return result;
      }
    
      /**
       * Extends object a by mutably adding to it the properties of object b.
       *
       * @param {Object} a The object to be extended
       * @param {Object} b The object to copy properties from
       * @param {Object} thisArg The object to bind function to
       * @return {Object} The resulting value of object a
       */
      function extend(a, b, thisArg) {
        forEach(b, function assignValue(val, key) {
          if (thisArg && typeof val === 'function') {
            a[key] = bind(val, thisArg);
          } else {
            a[key] = val;
          }
        });
        return a;
      }
    
      /**
       * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
       *
       * @param {string} content with BOM
       * @return {string} content value without BOM
       */
      function stripBOM(content) {
        if (content.charCodeAt(0) === 0xFEFF) {
          content = content.slice(1);
        }
        return content;
      }
    
      /**
       * Inherit the prototype methods from one constructor into another
       * @param {function} constructor
       * @param {function} superConstructor
       * @param {object} [props]
       * @param {object} [descriptors]
       */
    
      function inherits(constructor, superConstructor, props, descriptors) {
        constructor.prototype = Object.create(superConstructor.prototype, descriptors);
        constructor.prototype.constructor = constructor;
        props && Object.assign(constructor.prototype, props);
      }
    
      /**
       * Resolve object with deep prototype chain to a flat object
       * @param {Object} sourceObj source object
       * @param {Object} [destObj]
       * @param {Function|Boolean} [filter]
       * @param {Function} [propFilter]
       * @returns {Object}
       */
    
      function toFlatObject(sourceObj, destObj, filter, propFilter) {
        var props;
        var i;
        var prop;
        var merged = {};
    
        destObj = destObj || {};
        // eslint-disable-next-line no-eq-null,eqeqeq
        if (sourceObj == null) return destObj;
    
        do {
          props = Object.getOwnPropertyNames(sourceObj);
          i = props.length;
          while (i-- > 0) {
            prop = props[i];
            if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {
              destObj[prop] = sourceObj[prop];
              merged[prop] = true;
            }
          }
          sourceObj = filter !== false && Object.getPrototypeOf(sourceObj);
        } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);
    
        return destObj;
      }
    
      /*
       * determines whether a string ends with the characters of a specified string
       * @param {String} str
       * @param {String} searchString
       * @param {Number} [position= 0]
       * @returns {boolean}
       */
      function endsWith(str, searchString, position) {
        str = String(str);
        if (position === undefined || position > str.length) {
          position = str.length;
        }
        position -= searchString.length;
        var lastIndex = str.indexOf(searchString, position);
        return lastIndex !== -1 && lastIndex === position;
      }
    
    
      /**
       * Returns new array from array like object or null if failed
       * @param {*} [thing]
       * @returns {?Array}
       */
      function toArray(thing) {
        if (!thing) return null;
        if (isArray(thing)) return thing;
        var i = thing.length;
        if (!isNumber(i)) return null;
        var arr = new Array(i);
        while (i-- > 0) {
          arr[i] = thing[i];
        }
        return arr;
      }
    
      // eslint-disable-next-line func-names
      var isTypedArray = (function(TypedArray) {
        // eslint-disable-next-line func-names
        return function(thing) {
          return TypedArray && thing instanceof TypedArray;
        };
      })(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));
    
      function forEachEntry(obj, fn) {
        var generator = obj && obj[Symbol.iterator];
    
        var iterator = generator.call(obj);
    
        var result;
    
        while ((result = iterator.next()) && !result.done) {
          var pair = result.value;
          fn.call(obj, pair[0], pair[1]);
        }
      }
    
      function matchAll(regExp, str) {
        var matches;
        var arr = [];
    
        while ((matches = regExp.exec(str)) !== null) {
          arr.push(matches);
        }
    
        return arr;
      }
    
      var isHTMLForm = kindOfTest('HTMLFormElement');
    
      var hasOwnProperty = (function resolver(_hasOwnProperty) {
        return function(obj, prop) {
          return _hasOwnProperty.call(obj, prop);
        };
      })(Object.prototype.hasOwnProperty);
    
      var utils = {
        isArray: isArray,
        isArrayBuffer: isArrayBuffer,
        isBuffer: isBuffer,
        isFormData: isFormData,
        isArrayBufferView: isArrayBufferView,
        isString: isString,
        isNumber: isNumber,
        isObject: isObject,
        isPlainObject: isPlainObject,
        isUndefined: isUndefined,
        isDate: isDate,
        isFile: isFile,
        isBlob: isBlob,
        isFunction: isFunction,
        isStream: isStream,
        isURLSearchParams: isURLSearchParams,
        isStandardBrowserEnv: isStandardBrowserEnv,
        forEach: forEach,
        merge: merge,
        extend: extend,
        trim: trim,
        stripBOM: stripBOM,
        inherits: inherits,
        toFlatObject: toFlatObject,
        kindOf: kindOf,
        kindOfTest: kindOfTest,
        endsWith: endsWith,
        toArray: toArray,
        isTypedArray: isTypedArray,
        isFileList: isFileList,
        forEachEntry: forEachEntry,
        matchAll: matchAll,
        isHTMLForm: isHTMLForm,
        hasOwnProperty: hasOwnProperty
      };
    
      /**
       * Create an Error with the specified message, config, error code, request and response.
       *
       * @param {string} message The error message.
       * @param {string} [code] The error code (for example, 'ECONNABORTED').
       * @param {Object} [config] The config.
       * @param {Object} [request] The request.
       * @param {Object} [response] The response.
       * @returns {Error} The created error.
       */
      function AxiosError(message, code, config, request, response) {
        Error.call(this);
    
        if (Error.captureStackTrace) {
          Error.captureStackTrace(this, this.constructor);
        } else {
          this.stack = (new Error()).stack;
        }
    
        this.message = message;
        this.name = 'AxiosError';
        code && (this.code = code);
        config && (this.config = config);
        request && (this.request = request);
        response && (this.response = response);
      }
    
      utils.inherits(AxiosError, Error, {
        toJSON: function toJSON() {
          return {
            // Standard
            message: this.message,
            name: this.name,
            // Microsoft
            description: this.description,
            number: this.number,
            // Mozilla
            fileName: this.fileName,
            lineNumber: this.lineNumber,
            columnNumber: this.columnNumber,
            stack: this.stack,
            // Axios
            config: this.config,
            code: this.code,
            status: this.response && this.response.status ? this.response.status : null
          };
        }
      });
    
      var prototype$1 = AxiosError.prototype;
      var descriptors = {};
    
      [
        'ERR_BAD_OPTION_VALUE',
        'ERR_BAD_OPTION',
        'ECONNABORTED',
        'ETIMEDOUT',
        'ERR_NETWORK',
        'ERR_FR_TOO_MANY_REDIRECTS',
        'ERR_DEPRECATED',
        'ERR_BAD_RESPONSE',
        'ERR_BAD_REQUEST',
        'ERR_CANCELED',
        'ERR_NOT_SUPPORT',
        'ERR_INVALID_URL'
      // eslint-disable-next-line func-names
      ].forEach(function(code) {
        descriptors[code] = {value: code};
      });
    
      Object.defineProperties(AxiosError, descriptors);
      Object.defineProperty(prototype$1, 'isAxiosError', {value: true});
    
      // eslint-disable-next-line func-names
      AxiosError.from = function(error, code, config, request, response, customProps) {
        var axiosError = Object.create(prototype$1);
    
        utils.toFlatObject(error, axiosError, function filter(obj) {
          return obj !== Error.prototype;
        });
    
        AxiosError.call(axiosError, error.message, code, config, request, response);
    
        axiosError.cause = error;
    
        axiosError.name = error.name;
    
        customProps && Object.assign(axiosError, customProps);
    
        return axiosError;
      };
    
      var AxiosError_1 = AxiosError;
    
      /* eslint-env browser */
      var browser$1 = typeof self == 'object' ? self.FormData : window.FormData;
    
      // eslint-disable-next-line strict
      var FormData$1 = browser$1;
    
      function isVisitable(thing) {
        return utils.isPlainObject(thing) || utils.isArray(thing);
      }
    
      function removeBrackets(key) {
        return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;
      }
    
      function renderKey(path, key, dots) {
        if (!path) return key;
        return path.concat(key).map(function each(token, i) {
          // eslint-disable-next-line no-param-reassign
          token = removeBrackets(token);
          return !dots && i ? '[' + token + ']' : token;
        }).join(dots ? '.' : '');
      }
    
      function isFlatArray(arr) {
        return utils.isArray(arr) && !arr.some(isVisitable);
      }
    
      var predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {
        return /^is[A-Z]/.test(prop);
      });
    
      function isSpecCompliant(thing) {
        return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator];
      }
    
      /**
       * Convert a data object to FormData
       * @param {Object} obj
       * @param {?Object} [formData]
       * @param {?Object} [options]
       * @param {Function} [options.visitor]
       * @param {Boolean} [options.metaTokens = true]
       * @param {Boolean} [options.dots = false]
       * @param {?Boolean} [options.indexes = false]
       * @returns {Object}
       **/
    
      function toFormData(obj, formData, options) {
        if (!utils.isObject(obj)) {
          throw new TypeError('target must be an object');
        }
    
        // eslint-disable-next-line no-param-reassign
        formData = formData || new (FormData$1 || FormData)();
    
        // eslint-disable-next-line no-param-reassign
        options = utils.toFlatObject(options, {
          metaTokens: true,
          dots: false,
          indexes: false
        }, false, function defined(option, source) {
          // eslint-disable-next-line no-eq-null,eqeqeq
          return !utils.isUndefined(source[option]);
        });
    
        var metaTokens = options.metaTokens;
        // eslint-disable-next-line no-use-before-define
        var visitor = options.visitor || defaultVisitor;
        var dots = options.dots;
        var indexes = options.indexes;
        var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;
        var useBlob = _Blob && isSpecCompliant(formData);
    
        if (!utils.isFunction(visitor)) {
          throw new TypeError('visitor must be a function');
        }
    
        function convertValue(value) {
          if (value === null) return '';
    
          if (utils.isDate(value)) {
            return value.toISOString();
          }
    
          if (!useBlob && utils.isBlob(value)) {
            throw new AxiosError_1('Blob is not supported. Use a Buffer instead.');
          }
    
          if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {
            return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
          }
    
          return value;
        }
    
        /**
         *
         * @param {*} value
         * @param {String|Number} key
         * @param {Array<String|Number>} path
         * @this {FormData}
         * @returns {boolean} return true to visit the each prop of the value recursively
         */
        function defaultVisitor(value, key, path) {
          var arr = value;
    
          if (value && !path && typeof value === 'object') {
            if (utils.endsWith(key, '{}')) {
              // eslint-disable-next-line no-param-reassign
              key = metaTokens ? key : key.slice(0, -2);
              // eslint-disable-next-line no-param-reassign
              value = JSON.stringify(value);
            } else if (
              (utils.isArray(value) && isFlatArray(value)) ||
              (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value))
              )) {
              // eslint-disable-next-line no-param-reassign
              key = removeBrackets(key);
    
              arr.forEach(function each(el, index) {
                !utils.isUndefined(el) && formData.append(
                  // eslint-disable-next-line no-nested-ternary
                  indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),
                  convertValue(el)
                );
              });
              return false;
            }
          }
    
          if (isVisitable(value)) {
            return true;
          }
    
          formData.append(renderKey(path, key, dots), convertValue(value));
    
          return false;
        }
    
        var stack = [];
    
        var exposedHelpers = Object.assign(predicates, {
          defaultVisitor: defaultVisitor,
          convertValue: convertValue,
          isVisitable: isVisitable
        });
    
        function build(value, path) {
          if (utils.isUndefined(value)) return;
    
          if (stack.indexOf(value) !== -1) {
            throw Error('Circular reference detected in ' + path.join('.'));
          }
    
          stack.push(value);
    
          utils.forEach(value, function each(el, key) {
            var result = !utils.isUndefined(el) && visitor.call(
              formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers
            );
    
            if (result === true) {
              build(el, path ? path.concat(key) : [key]);
            }
          });
    
          stack.pop();
        }
    
        if (!utils.isObject(obj)) {
          throw new TypeError('data must be an object');
        }
    
        build(obj);
    
        return formData;
      }
    
      var toFormData_1 = toFormData;
    
      function encode$1(str) {
        var charMap = {
          '!': '%21',
          "'": '%27',
          '(': '%28',
          ')': '%29',
          '~': '%7E',
          '%20': '+',
          '%00': '\x00'
        };
        return encodeURIComponent(str).replace(/[!'\(\)~]|%20|%00/g, function replacer(match) {
          return charMap[match];
        });
      }
    
      function AxiosURLSearchParams(params, options) {
        this._pairs = [];
    
        params && toFormData_1(params, this, options);
      }
    
      var prototype = AxiosURLSearchParams.prototype;
    
      prototype.append = function append(name, value) {
        this._pairs.push([name, value]);
      };
    
      prototype.toString = function toString(encoder) {
        var _encode = encoder ? function(value) {
          return encoder.call(this, value, encode$1);
        } : encode$1;
    
        return this._pairs.map(function each(pair) {
          return _encode(pair[0]) + '=' + _encode(pair[1]);
        }, '').join('&');
      };
    
      var AxiosURLSearchParams_1 = AxiosURLSearchParams;
    
      function encode(val) {
        return encodeURIComponent(val).
          replace(/%3A/gi, ':').
          replace(/%24/g, '$').
          replace(/%2C/gi, ',').
          replace(/%20/g, '+').
          replace(/%5B/gi, '[').
          replace(/%5D/gi, ']');
      }
    
      /**
       * Build a URL by appending params to the end
       *
       * @param {string} url The base of the url (e.g., http://www.google.com)
       * @param {object} [params] The params to be appended
       * @param {?object} options
       * @returns {string} The formatted url
       */
      var buildURL = function buildURL(url, params, options) {
        /*eslint no-param-reassign:0*/
        if (!params) {
          return url;
        }
    
        var hashmarkIndex = url.indexOf('#');
    
        if (hashmarkIndex !== -1) {
          url = url.slice(0, hashmarkIndex);
        }
    
        var _encode = options && options.encode || encode;
    
        var serializerParams = utils.isURLSearchParams(params) ?
          params.toString() :
          new AxiosURLSearchParams_1(params, options).toString(_encode);
    
        if (serializerParams) {
          url += (url.indexOf('?') === -1 ? '?' : '&') + serializerParams;
        }
    
        return url;
      };
    
      function InterceptorManager() {
        this.handlers = [];
      }
    
      /**
       * Add a new interceptor to the stack
       *
       * @param {Function} fulfilled The function to handle `then` for a `Promise`
       * @param {Function} rejected The function to handle `reject` for a `Promise`
       *
       * @return {Number} An ID used to remove interceptor later
       */
      InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
        this.handlers.push({
          fulfilled: fulfilled,
          rejected: rejected,
          synchronous: options ? options.synchronous : false,
          runWhen: options ? options.runWhen : null
        });
        return this.handlers.length - 1;
      };
    
      /**
       * Remove an interceptor from the stack
       *
       * @param {Number} id The ID that was returned by `use`
       */
      InterceptorManager.prototype.eject = function eject(id) {
        if (this.handlers[id]) {
          this.handlers[id] = null;
        }
      };
    
      /**
       * Clear all interceptors from the stack
       */
      InterceptorManager.prototype.clear = function clear() {
        if (this.handlers) {
          this.handlers = [];
        }
      };
    
      /**
       * Iterate over all the registered interceptors
       *
       * This method is particularly useful for skipping over any
       * interceptors that may have become `null` calling `eject`.
       *
       * @param {Function} fn The function to call for each interceptor
       */
      InterceptorManager.prototype.forEach = function forEach(fn) {
        utils.forEach(this.handlers, function forEachHandler(h) {
          if (h !== null) {
            fn(h);
          }
        });
      };
    
      var InterceptorManager_1 = InterceptorManager;
    
      var normalizeHeaderName = function normalizeHeaderName(headers, normalizedName) {
        utils.forEach(headers, function processHeader(value, name) {
          if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
            headers[normalizedName] = value;
            delete headers[name];
          }
        });
      };
    
      var transitional = {
        silentJSONParsing: true,
        forcedJSONParsing: true,
        clarifyTimeoutError: false
      };
    
      var URLSearchParams_1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams_1;
    
      var FormData_1 = FormData;
    
      var browser = {
        isBrowser: true,
        classes: {
          URLSearchParams: URLSearchParams_1,
          FormData: FormData_1,
          Blob: Blob
        },
        protocols: ['http', 'https', 'file', 'blob', 'url']
      };
    
      var platform = browser;
    
      var toURLEncodedForm = function toURLEncodedForm(data, options) {
        return toFormData_1(data, new platform.classes.URLSearchParams(), Object.assign({
          visitor: function(value, key, path, helpers) {
            if (platform.isNode && utils.isBuffer(value)) {
              this.append(key, value.toString('base64'));
              return false;
            }
    
            return helpers.defaultVisitor.apply(this, arguments);
          }
        }, options));
      };
    
      function parsePropPath(name) {
        // foo[x][y][z]
        // foo.x.y.z
        // foo-x-y-z
        // foo x y z
        return utils.matchAll(/\w+|\[(\w*)]/g, name).map(function(match) {
          return match[0] === '[]' ? '' : match[1] || match[0];
        });
      }
    
      function arrayToObject(arr) {
        var obj = {};
        var keys = Object.keys(arr);
        var i;
        var len = keys.length;
        var key;
        for (i = 0; i < len; i++) {
          key = keys[i];
          obj[key] = arr[key];
        }
        return obj;
      }
    
      function formDataToJSON(formData) {
        function buildPath(path, value, target, index) {
          var name = path[index++];
          var isNumericKey = Number.isFinite(+name);
          var isLast = index >= path.length;
          name = !name && utils.isArray(target) ? target.length : name;
    
          if (isLast) {
            if (utils.hasOwnProperty(target, name)) {
              target[name] = [target[name], value];
            } else {
              target[name] = value;
            }
    
            return !isNumericKey;
          }
    
          if (!target[name] || !utils.isObject(target[name])) {
            target[name] = [];
          }
    
          var result = buildPath(path, value, target[name], index);
    
          if (result && utils.isArray(target[name])) {
            target[name] = arrayToObject(target[name]);
          }
    
          return !isNumericKey;
        }
    
        if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {
          var obj = {};
    
          utils.forEachEntry(formData, function(name, value) {
            buildPath(parsePropPath(name), value, obj, 0);
          });
    
          return obj;
        }
    
        return null;
      }
    
      var formDataToJSON_1 = formDataToJSON;
    
      /**
       * Resolve or reject a Promise based on response status.
       *
       * @param {Function} resolve A function that resolves the promise.
       * @param {Function} reject A function that rejects the promise.
       * @param {object} response The response.
       */
      var settle = function settle(resolve, reject, response) {
        var validateStatus = response.config.validateStatus;
        if (!response.status || !validateStatus || validateStatus(response.status)) {
          resolve(response);
        } else {
          reject(new AxiosError_1(
            'Request failed with status code ' + response.status,
            [AxiosError_1.ERR_BAD_REQUEST, AxiosError_1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
            response.config,
            response.request,
            response
          ));
        }
      };
    
      var cookies = (
        utils.isStandardBrowserEnv() ?
    
        // Standard browser envs support document.cookie
          (function standardBrowserEnv() {
            return {
              write: function write(name, value, expires, path, domain, secure) {
                var cookie = [];
                cookie.push(name + '=' + encodeURIComponent(value));
    
                if (utils.isNumber(expires)) {
                  cookie.push('expires=' + new Date(expires).toGMTString());
                }
    
                if (utils.isString(path)) {
                  cookie.push('path=' + path);
                }
    
                if (utils.isString(domain)) {
                  cookie.push('domain=' + domain);
                }
    
                if (secure === true) {
                  cookie.push('secure');
                }
    
                document.cookie = cookie.join('; ');
              },
    
              read: function read(name) {
                var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
                return (match ? decodeURIComponent(match[3]) : null);
              },
    
              remove: function remove(name) {
                this.write(name, '', Date.now() - 86400000);
              }
            };
          })() :
    
        // Non standard browser env (web workers, react-native) lack needed support.
          (function nonStandardBrowserEnv() {
            return {
              write: function write() {},
              read: function read() { return null; },
              remove: function remove() {}
            };
          })()
      );
    
      /**
       * Determines whether the specified URL is absolute
       *
       * @param {string} url The URL to test
       * @returns {boolean} True if the specified URL is absolute, otherwise false
       */
      var isAbsoluteURL = function isAbsoluteURL(url) {
        // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
        // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
        // by any combination of letters, digits, plus, period, or hyphen.
        return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
      };
    
      /**
       * Creates a new URL by combining the specified URLs
       *
       * @param {string} baseURL The base URL
       * @param {string} relativeURL The relative URL
       * @returns {string} The combined URL
       */
      var combineURLs = function combineURLs(baseURL, relativeURL) {
        return relativeURL
          ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
          : baseURL;
      };
    
      /**
       * Creates a new URL by combining the baseURL with the requestedURL,
       * only when the requestedURL is not already an absolute URL.
       * If the requestURL is absolute, this function returns the requestedURL untouched.
       *
       * @param {string} baseURL The base URL
       * @param {string} requestedURL Absolute or relative URL to combine
       * @returns {string} The combined full path
       */
      var buildFullPath = function buildFullPath(baseURL, requestedURL) {
        if (baseURL && !isAbsoluteURL(requestedURL)) {
          return combineURLs(baseURL, requestedURL);
        }
        return requestedURL;
      };
    
      // Headers whose duplicates are ignored by node
      // c.f. https://nodejs.org/api/http.html#http_message_headers
      var ignoreDuplicateOf = [
        'age', 'authorization', 'content-length', 'content-type', 'etag',
        'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
        'last-modified', 'location', 'max-forwards', 'proxy-authorization',
        'referer', 'retry-after', 'user-agent'
      ];
    
      /**
       * Parse headers into an object
       *
       * ```
       * Date: Wed, 27 Aug 2014 08:58:49 GMT
       * Content-Type: application/json
       * Connection: keep-alive
       * Transfer-Encoding: chunked
       * ```
       *
       * @param {String} headers Headers needing to be parsed
       * @returns {Object} Headers parsed into an object
       */
      var parseHeaders = function parseHeaders(headers) {
        var parsed = {};
        var key;
        var val;
        var i;
    
        if (!headers) { return parsed; }
    
        utils.forEach(headers.split('\n'), function parser(line) {
          i = line.indexOf(':');
          key = utils.trim(line.slice(0, i)).toLowerCase();
          val = utils.trim(line.slice(i + 1));
    
          if (key) {
            if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
              return;
            }
            if (key === 'set-cookie') {
              parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
            } else {
              parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
            }
          }
        });
    
        return parsed;
      };
    
      var isURLSameOrigin = (
        utils.isStandardBrowserEnv() ?
    
        // Standard browser envs have full support of the APIs needed to test
        // whether the request URL is of the same origin as current location.
          (function standardBrowserEnv() {
            var msie = /(msie|trident)/i.test(navigator.userAgent);
            var urlParsingNode = document.createElement('a');
            var originURL;
    
            /**
            * Parse a URL to discover it's components
            *
            * @param {String} url The URL to be parsed
            * @returns {Object}
            */
            function resolveURL(url) {
              var href = url;
    
              if (msie) {
                // IE needs attribute set twice to normalize properties
                urlParsingNode.setAttribute('href', href);
                href = urlParsingNode.href;
              }
    
              urlParsingNode.setAttribute('href', href);
    
              // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
              return {
                href: urlParsingNode.href,
                protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
                host: urlParsingNode.host,
                search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
                hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
                hostname: urlParsingNode.hostname,
                port: urlParsingNode.port,
                pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
                  urlParsingNode.pathname :
                  '/' + urlParsingNode.pathname
              };
            }
    
            originURL = resolveURL(window.location.href);
    
            /**
            * Determine if a URL shares the same origin as the current location
            *
            * @param {String} requestURL The URL to test
            * @returns {boolean} True if URL shares the same origin, otherwise false
            */
            return function isURLSameOrigin(requestURL) {
              var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
              return (parsed.protocol === originURL.protocol &&
                  parsed.host === originURL.host);
            };
          })() :
    
          // Non standard browser envs (web workers, react-native) lack needed support.
          (function nonStandardBrowserEnv() {
            return function isURLSameOrigin() {
              return true;
            };
          })()
      );
    
      /**
       * A `CanceledError` is an object that is thrown when an operation is canceled.
       *
       * @class
       * @param {string=} message The message.
       * @param {Object=} config The config.
       * @param {Object=} request The request.
       */
      function CanceledError(message, config, request) {
        // eslint-disable-next-line no-eq-null,eqeqeq
        AxiosError_1.call(this, message == null ? 'canceled' : message, AxiosError_1.ERR_CANCELED, config, request);
        this.name = 'CanceledError';
      }
    
      utils.inherits(CanceledError, AxiosError_1, {
        __CANCEL__: true
      });
    
      var CanceledError_1 = CanceledError;
    
      var parseProtocol = function parseProtocol(url) {
        var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
        return match && match[1] || '';
      };
    
      var xhr = function xhrAdapter(config) {
        return new Promise(function dispatchXhrRequest(resolve, reject) {
          var requestData = config.data;
          var requestHeaders = config.headers;
          var responseType = config.responseType;
          var onCanceled;
          function done() {
            if (config.cancelToken) {
              config.cancelToken.unsubscribe(onCanceled);
            }
    
            if (config.signal) {
              config.signal.removeEventListener('abort', onCanceled);
            }
          }
    
          if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {
            delete requestHeaders['Content-Type']; // Let the browser set it
          }
    
          var request = new XMLHttpRequest();
    
          // HTTP basic authentication
          if (config.auth) {
            var username = config.auth.username || '';
            var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
            requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
          }
    
          var fullPath = buildFullPath(config.baseURL, config.url);
    
          request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
    
          // Set the request timeout in MS
          request.timeout = config.timeout;
    
          function onloadend() {
            if (!request) {
              return;
            }
            // Prepare the response
            var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
            var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?
              request.responseText : request.response;
            var response = {
              data: responseData,
              status: request.status,
              statusText: request.statusText,
              headers: responseHeaders,
              config: config,
              request: request
            };
    
            settle(function _resolve(value) {
              resolve(value);
              done();
            }, function _reject(err) {
              reject(err);
              done();
            }, response);
    
            // Clean up request
            request = null;
          }
    
          if ('onloadend' in request) {
            // Use onloadend if available
            request.onloadend = onloadend;
          } else {
            // Listen for ready state to emulate onloadend
            request.onreadystatechange = function handleLoad() {
              if (!request || request.readyState !== 4) {
                return;
              }
    
              // The request errored out and we didn't get a response, this will be
              // handled by onerror instead
              // With one exception: request that using file: protocol, most browsers
              // will return status as 0 even though it's a successful request
              if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
                return;
              }
              // readystate handler is calling before onerror or ontimeout handlers,
              // so we should call onloadend on the next 'tick'
              setTimeout(onloadend);
            };
          }
    
          // Handle browser request cancellation (as opposed to a manual cancellation)
          request.onabort = function handleAbort() {
            if (!request) {
              return;
            }
    
            reject(new AxiosError_1('Request aborted', AxiosError_1.ECONNABORTED, config, request));
    
            // Clean up request
            request = null;
          };
    
          // Handle low level network errors
          request.onerror = function handleError() {
            // Real errors are hidden from us by the browser
            // onerror should only fire if it's a network error
            reject(new AxiosError_1('Network Error', AxiosError_1.ERR_NETWORK, config, request));
    
            // Clean up request
            request = null;
          };
    
          // Handle timeout
          request.ontimeout = function handleTimeout() {
            var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
            var transitional$1 = config.transitional || transitional;
            if (config.timeoutErrorMessage) {
              timeoutErrorMessage = config.timeoutErrorMessage;
            }
            reject(new AxiosError_1(
              timeoutErrorMessage,
              transitional$1.clarifyTimeoutError ? AxiosError_1.ETIMEDOUT : AxiosError_1.ECONNABORTED,
              config,
              request));
    
            // Clean up request
            request = null;
          };
    
          // Add xsrf header
          // This is only done if running in a standard browser environment.
          // Specifically not if we're in a web worker, or react-native.
          if (utils.isStandardBrowserEnv()) {
            // Add xsrf header
            var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
              cookies.read(config.xsrfCookieName) :
              undefined;
    
            if (xsrfValue) {
              requestHeaders[config.xsrfHeaderName] = xsrfValue;
            }
          }
    
          // Add headers to the request
          if ('setRequestHeader' in request) {
            utils.forEach(requestHeaders, function setRequestHeader(val, key) {
              if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
                // Remove Content-Type if data is undefined
                delete requestHeaders[key];
              } else {
                // Otherwise add header to the request
                request.setRequestHeader(key, val);
              }
            });
          }
    
          // Add withCredentials to request if needed
          if (!utils.isUndefined(config.withCredentials)) {
            request.withCredentials = !!config.withCredentials;
          }
    
          // Add responseType to request if needed
          if (responseType && responseType !== 'json') {
            request.responseType = config.responseType;
          }
    
          // Handle progress if needed
          if (typeof config.onDownloadProgress === 'function') {
            request.addEventListener('progress', config.onDownloadProgress);
          }
    
          // Not all browsers support upload events
          if (typeof config.onUploadProgress === 'function' && request.upload) {
            request.upload.addEventListener('progress', config.onUploadProgress);
          }
    
          if (config.cancelToken || config.signal) {
            // Handle cancellation
            // eslint-disable-next-line func-names
            onCanceled = function(cancel) {
              if (!request) {
                return;
              }
              reject(!cancel || cancel.type ? new CanceledError_1(null, config, req) : cancel);
              request.abort();
              request = null;
            };
    
            config.cancelToken && config.cancelToken.subscribe(onCanceled);
            if (config.signal) {
              config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
            }
          }
    
          if (!requestData) {
            requestData = null;
          }
    
          var protocol = parseProtocol(fullPath);
    
          if (protocol && platform.protocols.indexOf(protocol) === -1) {
            reject(new AxiosError_1('Unsupported protocol ' + protocol + ':', AxiosError_1.ERR_BAD_REQUEST, config));
            return;
          }
    
    
          // Send the request
          request.send(requestData);
        });
      };
    
      var DEFAULT_CONTENT_TYPE = {
        'Content-Type': 'application/x-www-form-urlencoded'
      };
    
      function setContentTypeIfUnset(headers, value) {
        if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
          headers['Content-Type'] = value;
        }
      }
    
      function getDefaultAdapter() {
        var adapter;
        if (typeof XMLHttpRequest !== 'undefined') {
          // For browsers use XHR adapter
          adapter = xhr;
        } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
          // For node use HTTP adapter
          adapter = xhr;
        }
        return adapter;
      }
    
      function stringifySafely(rawValue, parser, encoder) {
        if (utils.isString(rawValue)) {
          try {
            (parser || JSON.parse)(rawValue);
            return utils.trim(rawValue);
          } catch (e) {
            if (e.name !== 'SyntaxError') {
              throw e;
            }
          }
        }
    
        return (encoder || JSON.stringify)(rawValue);
      }
    
      var defaults = {
    
        transitional: transitional,
    
        adapter: getDefaultAdapter(),
    
        transformRequest: [function transformRequest(data, headers) {
          normalizeHeaderName(headers, 'Accept');
          normalizeHeaderName(headers, 'Content-Type');
    
          var contentType = headers && headers['Content-Type'] || '';
          var hasJSONContentType = contentType.indexOf('application/json') > -1;
          var isObjectPayload = utils.isObject(data);
    
          if (isObjectPayload && utils.isHTMLForm(data)) {
            data = new FormData(data);
          }
    
          var isFormData = utils.isFormData(data);
    
          if (isFormData) {
            if (!hasJSONContentType) {
              return data;
            }
            return hasJSONContentType ? JSON.stringify(formDataToJSON_1(data)) : data;
          }
    
          if (utils.isArrayBuffer(data) ||
            utils.isBuffer(data) ||
            utils.isStream(data) ||
            utils.isFile(data) ||
            utils.isBlob(data)
          ) {
            return data;
          }
          if (utils.isArrayBufferView(data)) {
            return data.buffer;
          }
          if (utils.isURLSearchParams(data)) {
            setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
            return data.toString();
          }
    
          var isFileList;
    
          if (isObjectPayload) {
            if (contentType.indexOf('application/x-www-form-urlencoded') !== -1) {
              return toURLEncodedForm(data, this.formSerializer).toString();
            }
    
            if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {
              var _FormData = this.env && this.env.FormData;
    
              return toFormData_1(
                isFileList ? {'files[]': data} : data,
                _FormData && new _FormData(),
                this.formSerializer
              );
            }
          }
    
          if (isObjectPayload || hasJSONContentType ) {
            setContentTypeIfUnset(headers, 'application/json');
            return stringifySafely(data);
          }
    
          return data;
        }],
    
        transformResponse: [function transformResponse(data) {
          var transitional = this.transitional || defaults.transitional;
          var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
          var JSONRequested = this.responseType === 'json';
    
          if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {
            var silentJSONParsing = transitional && transitional.silentJSONParsing;
            var strictJSONParsing = !silentJSONParsing && JSONRequested;
    
            try {
              return JSON.parse(data);
            } catch (e) {
              if (strictJSONParsing) {
                if (e.name === 'SyntaxError') {
                  throw AxiosError_1.from(e, AxiosError_1.ERR_BAD_RESPONSE, this, null, this.response);
                }
                throw e;
              }
            }
          }
    
          return data;
        }],
    
        /**
         * A timeout in milliseconds to abort a request. If set to 0 (default) a
         * timeout is not created.
         */
        timeout: 0,
    
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
    
        maxContentLength: -1,
        maxBodyLength: -1,
    
        env: {
          FormData: platform.classes.FormData,
          Blob: platform.classes.Blob
        },
    
        validateStatus: function validateStatus(status) {
          return status >= 200 && status < 300;
        },
    
        headers: {
          common: {
            'Accept': 'application/json, text/plain, */*'
          }
        }
      };
    
      utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
        defaults.headers[method] = {};
      });
    
      utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
        defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
      });
    
      var defaults_1 = defaults;
    
      /**
       * Transform the data for a request or a response
       *
       * @param {Object|String} data The data to be transformed
       * @param {Array} headers The headers for the request or response
       * @param {Number} status HTTP status code
       * @param {Array|Function} fns A single function or Array of functions
       * @returns {*} The resulting transformed data
       */
      var transformData = function transformData(data, headers, status, fns) {
        var context = this || defaults_1;
        /*eslint no-param-reassign:0*/
        utils.forEach(fns, function transform(fn) {
          data = fn.call(context, data, headers, status);
        });
    
        return data;
      };
    
      var isCancel = function isCancel(value) {
        return !!(value && value.__CANCEL__);
      };
    
      /**
       * Throws a `CanceledError` if cancellation has been requested.
       */
      function throwIfCancellationRequested(config) {
        if (config.cancelToken) {
          config.cancelToken.throwIfRequested();
        }
    
        if (config.signal && config.signal.aborted) {
          throw new CanceledError_1();
        }
      }
    
      /**
       * Dispatch a request to the server using the configured adapter.
       *
       * @param {object} config The config that is to be used for the request
       * @returns {Promise} The Promise to be fulfilled
       */
      var dispatchRequest = function dispatchRequest(config) {
        throwIfCancellationRequested(config);
    
        // Ensure headers exist
        config.headers = config.headers || {};
    
        // Transform request data
        config.data = transformData.call(
          config,
          config.data,
          config.headers,
          null,
          config.transformRequest
        );
    
        normalizeHeaderName(config.headers, 'Accept');
        normalizeHeaderName(config.headers, 'Content-Type');
    
        // Flatten headers
        config.headers = utils.merge(
          config.headers.common || {},
          config.headers[config.method] || {},
          config.headers
        );
    
        utils.forEach(
          ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
          function cleanHeaderConfig(method) {
            delete config.headers[method];
          }
        );
    
        var adapter = config.adapter || defaults_1.adapter;
    
        return adapter(config).then(function onAdapterResolution(response) {
          throwIfCancellationRequested(config);
    
          // Transform response data
          response.data = transformData.call(
            config,
            response.data,
            response.headers,
            response.status,
            config.transformResponse
          );
    
          return response;
        }, function onAdapterRejection(reason) {
          if (!isCancel(reason)) {
            throwIfCancellationRequested(config);
    
            // Transform response data
            if (reason && reason.response) {
              reason.response.data = transformData.call(
                config,
                reason.response.data,
                reason.response.headers,
                reason.response.status,
                config.transformResponse
              );
            }
          }
    
          return Promise.reject(reason);
        });
      };
    
      /**
       * Config-specific merge-function which creates a new config-object
       * by merging two configuration objects together.
       *
       * @param {Object} config1
       * @param {Object} config2
       * @returns {Object} New object resulting from merging config2 to config1
       */
      var mergeConfig = function mergeConfig(config1, config2) {
        // eslint-disable-next-line no-param-reassign
        config2 = config2 || {};
        var config = {};
    
        function getMergedValue(target, source) {
          if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
            return utils.merge(target, source);
          } else if (utils.isPlainObject(source)) {
            return utils.merge({}, source);
          } else if (utils.isArray(source)) {
            return source.slice();
          }
          return source;
        }
    
        // eslint-disable-next-line consistent-return
        function mergeDeepProperties(prop) {
          if (!utils.isUndefined(config2[prop])) {
            return getMergedValue(config1[prop], config2[prop]);
          } else if (!utils.isUndefined(config1[prop])) {
            return getMergedValue(undefined, config1[prop]);
          }
        }
    
        // eslint-disable-next-line consistent-return
        function valueFromConfig2(prop) {
          if (!utils.isUndefined(config2[prop])) {
            return getMergedValue(undefined, config2[prop]);
          }
        }
    
        // eslint-disable-next-line consistent-return
        function defaultToConfig2(prop) {
          if (!utils.isUndefined(config2[prop])) {
            return getMergedValue(undefined, config2[prop]);
          } else if (!utils.isUndefined(config1[prop])) {
            return getMergedValue(undefined, config1[prop]);
          }
        }
    
        // eslint-disable-next-line consistent-return
        function mergeDirectKeys(prop) {
          if (prop in config2) {
            return getMergedValue(config1[prop], config2[prop]);
          } else if (prop in config1) {
            return getMergedValue(undefined, config1[prop]);
          }
        }
    
        var mergeMap = {
          'url': valueFromConfig2,
          'method': valueFromConfig2,
          'data': valueFromConfig2,
          'baseURL': defaultToConfig2,
          'transformRequest': defaultToConfig2,
          'transformResponse': defaultToConfig2,
          'paramsSerializer': defaultToConfig2,
          'timeout': defaultToConfig2,
          'timeoutMessage': defaultToConfig2,
          'withCredentials': defaultToConfig2,
          'adapter': defaultToConfig2,
          'responseType': defaultToConfig2,
          'xsrfCookieName': defaultToConfig2,
          'xsrfHeaderName': defaultToConfig2,
          'onUploadProgress': defaultToConfig2,
          'onDownloadProgress': defaultToConfig2,
          'decompress': defaultToConfig2,
          'maxContentLength': defaultToConfig2,
          'maxBodyLength': defaultToConfig2,
          'beforeRedirect': defaultToConfig2,
          'transport': defaultToConfig2,
          'httpAgent': defaultToConfig2,
          'httpsAgent': defaultToConfig2,
          'cancelToken': defaultToConfig2,
          'socketPath': defaultToConfig2,
          'responseEncoding': defaultToConfig2,
          'validateStatus': mergeDirectKeys
        };
    
        utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
          var merge = mergeMap[prop] || mergeDeepProperties;
          var configValue = merge(prop);
          (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
        });
    
        return config;
      };
    
      var data = {
        "version": "1.0.0-alpha.1"
      };
    
      var VERSION = data.version;
    
    
      var validators$1 = {};
    
      // eslint-disable-next-line func-names
      ['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {
        validators$1[type] = function validator(thing) {
          return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
        };
      });
    
      var deprecatedWarnings = {};
    
      /**
       * Transitional option validator
       * @param {function|boolean?} validator - set to false if the transitional option has been removed
       * @param {string?} version - deprecated version / removed since version
       * @param {string?} message - some message with additional info
       * @returns {function}
       */
      validators$1.transitional = function transitional(validator, version, message) {
        function formatMessage(opt, desc) {
          return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
        }
    
        // eslint-disable-next-line func-names
        return function(value, opt, opts) {
          if (validator === false) {
            throw new AxiosError_1(
              formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
              AxiosError_1.ERR_DEPRECATED
            );
          }
    
          if (version && !deprecatedWarnings[opt]) {
            deprecatedWarnings[opt] = true;
            // eslint-disable-next-line no-console
            console.warn(
              formatMessage(
                opt,
                ' has been deprecated since v' + version + ' and will be removed in the near future'
              )
            );
          }
    
          return validator ? validator(value, opt, opts) : true;
        };
      };
    
      /**
       * Assert object's properties type
       * @param {object} options
       * @param {object} schema
       * @param {boolean?} allowUnknown
       */
    
      function assertOptions(options, schema, allowUnknown) {
        if (typeof options !== 'object') {
          throw new AxiosError_1('options must be an object', AxiosError_1.ERR_BAD_OPTION_VALUE);
        }
        var keys = Object.keys(options);
        var i = keys.length;
        while (i-- > 0) {
          var opt = keys[i];
          var validator = schema[opt];
          if (validator) {
            var value = options[opt];
            var result = value === undefined || validator(value, opt, options);
            if (result !== true) {
              throw new AxiosError_1('option ' + opt + ' must be ' + result, AxiosError_1.ERR_BAD_OPTION_VALUE);
            }
            continue;
          }
          if (allowUnknown !== true) {
            throw new AxiosError_1('Unknown option ' + opt, AxiosError_1.ERR_BAD_OPTION);
          }
        }
      }
    
      var validator = {
        assertOptions: assertOptions,
        validators: validators$1
      };
    
      var validators = validator.validators;
      /**
       * Create a new instance of Axios
       *
       * @param {Object} instanceConfig The default config for the instance
       */
      function Axios(instanceConfig) {
        this.defaults = instanceConfig;
        this.interceptors = {
          request: new InterceptorManager_1(),
          response: new InterceptorManager_1()
        };
      }
    
      /**
       * Dispatch a request
       *
       * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)
       * @param {?Object} config
       */
      Axios.prototype.request = function request(configOrUrl, config) {
        /*eslint no-param-reassign:0*/
        // Allow for axios('example/url'[, config]) a la fetch API
        if (typeof configOrUrl === 'string') {
          config = config || {};
          config.url = configOrUrl;
        } else {
          config = configOrUrl || {};
        }
    
        config = mergeConfig(this.defaults, config);
    
        // Set config.method
        if (config.method) {
          config.method = config.method.toLowerCase();
        } else if (this.defaults.method) {
          config.method = this.defaults.method.toLowerCase();
        } else {
          config.method = 'get';
        }
    
        var transitional = config.transitional;
    
        if (transitional !== undefined) {
          validator.assertOptions(transitional, {
            silentJSONParsing: validators.transitional(validators.boolean),
            forcedJSONParsing: validators.transitional(validators.boolean),
            clarifyTimeoutError: validators.transitional(validators.boolean)
          }, false);
        }
    
        // filter out skipped interceptors
        var requestInterceptorChain = [];
        var synchronousRequestInterceptors = true;
        this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
          if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
            return;
          }
    
          synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
    
          requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
        });
    
        var responseInterceptorChain = [];
        this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
          responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
        });
    
        var promise;
    
        if (!synchronousRequestInterceptors) {
          var chain = [dispatchRequest, undefined];
    
          Array.prototype.unshift.apply(chain, requestInterceptorChain);
          chain = chain.concat(responseInterceptorChain);
    
          promise = Promise.resolve(config);
          while (chain.length) {
            promise = promise.then(chain.shift(), chain.shift());
          }
    
          return promise;
        }
    
    
        var newConfig = config;
        while (requestInterceptorChain.length) {
          var onFulfilled = requestInterceptorChain.shift();
          var onRejected = requestInterceptorChain.shift();
          try {
            newConfig = onFulfilled(newConfig);
          } catch (error) {
            onRejected(error);
            break;
          }
        }
    
        try {
          promise = dispatchRequest(newConfig);
        } catch (error) {
          return Promise.reject(error);
        }
    
        while (responseInterceptorChain.length) {
          promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
        }
    
        return promise;
      };
    
      Axios.prototype.getUri = function getUri(config) {
        config = mergeConfig(this.defaults, config);
        var fullPath = buildFullPath(config.baseURL, config.url);
        return buildURL(fullPath, config.params, config.paramsSerializer);
      };
    
      // Provide aliases for supported request methods
      utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
        /*eslint func-names:0*/
        Axios.prototype[method] = function(url, config) {
          return this.request(mergeConfig(config || {}, {
            method: method,
            url: url,
            data: (config || {}).data
          }));
        };
      });
    
      utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
        /*eslint func-names:0*/
    
        function generateHTTPMethod(isForm) {
          return function httpMethod(url, data, config) {
            return this.request(mergeConfig(config || {}, {
              method: method,
              headers: isForm ? {
                'Content-Type': 'multipart/form-data'
              } : {},
              url: url,
              data: data
            }));
          };
        }
    
        Axios.prototype[method] = generateHTTPMethod();
    
        Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
      });
    
      var Axios_1 = Axios;
    
      /**
       * A `CancelToken` is an object that can be used to request cancellation of an operation.
       *
       * @class
       * @param {Function} executor The executor function.
       */
      function CancelToken(executor) {
        if (typeof executor !== 'function') {
          throw new TypeError('executor must be a function.');
        }
    
        var resolvePromise;
    
        this.promise = new Promise(function promiseExecutor(resolve) {
          resolvePromise = resolve;
        });
    
        var token = this;
    
        // eslint-disable-next-line func-names
        this.promise.then(function(cancel) {
          if (!token._listeners) return;
    
          var i = token._listeners.length;
    
          while (i-- > 0) {
            token._listeners[i](cancel);
          }
          token._listeners = null;
        });
    
        // eslint-disable-next-line func-names
        this.promise.then = function(onfulfilled) {
          var _resolve;
          // eslint-disable-next-line func-names
          var promise = new Promise(function(resolve) {
            token.subscribe(resolve);
            _resolve = resolve;
          }).then(onfulfilled);
    
          promise.cancel = function reject() {
            token.unsubscribe(_resolve);
          };
    
          return promise;
        };
    
        executor(function cancel(message, config, request) {
          if (token.reason) {
            // Cancellation has already been requested
            return;
          }
    
          token.reason = new CanceledError_1(message, config, request);
          resolvePromise(token.reason);
        });
      }
    
      /**
       * Throws a `CanceledError` if cancellation has been requested.
       */
      CancelToken.prototype.throwIfRequested = function throwIfRequested() {
        if (this.reason) {
          throw this.reason;
        }
      };
    
      /**
       * Subscribe to the cancel signal
       */
    
      CancelToken.prototype.subscribe = function subscribe(listener) {
        if (this.reason) {
          listener(this.reason);
          return;
        }
    
        if (this._listeners) {
          this._listeners.push(listener);
        } else {
          this._listeners = [listener];
        }
      };
    
      /**
       * Unsubscribe from the cancel signal
       */
    
      CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
        if (!this._listeners) {
          return;
        }
        var index = this._listeners.indexOf(listener);
        if (index !== -1) {
          this._listeners.splice(index, 1);
        }
      };
    
      /**
       * Returns an object that contains a new `CancelToken` and a function that, when called,
       * cancels the `CancelToken`.
       */
      CancelToken.source = function source() {
        var cancel;
        var token = new CancelToken(function executor(c) {
          cancel = c;
        });
        return {
          token: token,
          cancel: cancel
        };
      };
    
      var CancelToken_1 = CancelToken;
    
      /**
       * Syntactic sugar for invoking a function and expanding an array for arguments.
       *
       * Common use case would be to use `Function.prototype.apply`.
       *
       *  ```js
       *  function f(x, y, z) {}
       *  var args = [1, 2, 3];
       *  f.apply(null, args);
       *  ```
       *
       * With `spread` this example can be re-written.
       *
       *  ```js
       *  spread(function(x, y, z) {})([1, 2, 3]);
       *  ```
       *
       * @param {Function} callback
       * @returns {Function}
       */
      var spread = function spread(callback) {
        return function wrap(arr) {
          return callback.apply(null, arr);
        };
      };
    
      /**
       * Determines whether the payload is an error thrown by Axios
       *
       * @param {*} payload The value to test
       * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
       */
      var isAxiosError = function isAxiosError(payload) {
        return utils.isObject(payload) && (payload.isAxiosError === true);
      };
    
      /**
       * Create an instance of Axios
       *
       * @param {Object} defaultConfig The default config for the instance
       * @return {Axios} A new instance of Axios
       */
      function createInstance(defaultConfig) {
        var context = new Axios_1(defaultConfig);
        var instance = bind(Axios_1.prototype.request, context);
    
        // Copy axios.prototype to instance
        utils.extend(instance, Axios_1.prototype, context);
    
        // Copy context to instance
        utils.extend(instance, context);
    
        // Factory for creating new instances
        instance.create = function create(instanceConfig) {
          return createInstance(mergeConfig(defaultConfig, instanceConfig));
        };
    
        return instance;
      }
    
      // Create the default instance to be exported
      var axios = createInstance(defaults_1);
    
      // Expose Axios class to allow class inheritance
      axios.Axios = Axios_1;
    
      // Expose Cancel & CancelToken
      axios.CanceledError = CanceledError_1;
      axios.CancelToken = CancelToken_1;
      axios.isCancel = isCancel;
      axios.VERSION = data.version;
      axios.toFormData = toFormData_1;
    
      // Expose AxiosError class
      axios.AxiosError = AxiosError_1;
    
      // alias for CanceledError for backward compatibility
      axios.Cancel = axios.CanceledError;
    
      // Expose all/spread
      axios.all = function all(promises) {
        return Promise.all(promises);
      };
      axios.spread = spread;
    
      // Expose isAxiosError
      axios.isAxiosError = isAxiosError;
    
      axios.formToJSON = function(thing) {
        return formDataToJSON_1(utils.isHTMLForm(thing) ? new FormData(thing) : thing);
      };
    
      var axios_1 = axios;
    
      // Allow use of default import syntax in TypeScript
      var _default = axios;
      axios_1.default = _default;
    
      return axios_1;
    
    }));
    //# sourceMappingURL=axios.js.map